package ar.com.jsejtman.common.security.credential.entity;

import ar.com.jsejtman.common.domain.entity.Identifiable;
import ar.com.jsejtman.common.domain.entity.IdentifiableComparer;
import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Version;

/**
 * Contenido de Email de reinicio de clave de seguridad.
 * 
 * @author jsejtman
 */
@Entity
@Table(name = "password_reset_email_content")
public class PasswordResetEmailContent implements Identifiable<Long> {

	/**
	 * Identificador de la autoridad.
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id")
	private Long id;

	/**
	 * Código de la autoridad.
	 */
	@Column(name = "subject", nullable = false)
	private String subject;

	/**
	 * Descripción de la autoridad.
	 */
	@Column(name = "body", nullable = false)
	private String body;

	/**
	 * Número de versión de la entidad (para evitar escrituras concurrentes).
	 */
	@Version
	@Column(name = "version", nullable = false)
	private Long version;

	/**
	 * Devuelve el valor de id.
	 * 
	 * @return El valor de id.
	 */
	public final Long getId() {

		return (this.id);
	}

	/**
	 * Asigna un nuevo valor a id.
	 * 
	 * @param id El valor a asignar a id.
	 */
	protected final void setId(final Long id) {

		this.id = id;
	}

	/**
	 * Devuelve el valor de subject.
	 * 
	 * @return El valor de subject.
	 */
	public final String getSubject() {

		return (this.subject);
	}

	/**
	 * Asigna un nuevo valor a subject.
	 * 
	 * @param subject El valor a asignar a subject.
	 */
	public final void setSubject(final String subject) {

		this.subject = subject;
	}

	/**
	 * Devuelve el valor de body.
	 * 
	 * @return El valor de body.
	 */
	public final String getBody() {

		return (this.body);
	}

	/**
	 * Asigna un nuevo valor a body.
	 * 
	 * @param body El valor a asignar a body.
	 */
	public final void setBody(final String body) {

		this.body = body;
	}

	/**
	 * Devuelve el valor de version.
	 * 
	 * @return El valor de version.
	 */
	protected final Long getVersion() {

		return (this.version);
	}

	/**
	 * Asigna un nuevo valor a version.
	 * 
	 * @param version El valor a asignar a version.
	 */
	protected final void setVersion(final Long version) {

		this.version = version;
	}

	@Override
	public final int hashCode() {

		return ((this.id == null) ? 0 : this.id.hashCode());
	}

	@SuppressWarnings("unchecked")
	@Override
	public final boolean equals(final Object obj) {

		return (IdentifiableComparer.equals(this, (Identifiable<Serializable>) obj));
	}
}
